/**本地模拟假服务器 */
class FakeServerManage {
	/**单例对象 */
	private static instance: FakeServerManage;
	/**获取单例对象函数 */
	public static getInstance(): FakeServerManage {
		if (this.instance == null) {
			this.instance = new FakeServerManage();
		}
		return this.instance;
	}
	/**构造 */
	public constructor() {
		this.init();
	}
	/**假服务器初始化 */
	private init() {
		this.gameTimer = new egret.Timer(1000 / 60, 0);
		this.gameTimer.addEventListener(egret.TimerEvent.TIMER, this.gameLoop, this);
		this.gameTimer.start();
		// TableUI.Instance().saveSour('word4');//对方自由球
	}
	/**游戏场景 */
	public gameSence: TableUI;
	/**游戏循环定时器 */
	private gameTimer: egret.Timer;
	/**AI玩家 */
	public AI: AIBase = new AIBase();
	/**当前击球玩家
	 * 1-AI回合
	 * -1-我的回合
	 */
	public nowShoot: number = -1;
	/**玩家匹配
	 * 待完善（id，room）
	 */
	public playersMatch() {
		egret.setTimeout(this.gameSence.startGame1, this.gameSence, 100);
	}
	/**连杆计数 */
	// public numii: number = 0;
	/**交换球权 */
	public exchangeBall(isMyGame: boolean, type: number) {
		TableUI.Instance().isAIComBoPK = isMyGame;
		// TableUI.Instance().shootBallShow.text = "null";//清空判定信息显示
		if (!isMyGame) {
			this.nowShoot *= -1;
			// TableUI.Instance().numii = 0;
		}
		TableUI.Instance().countdownFunc(true, 30);

		//勿删
		// if (isMyGame && TableUI.Instance().isComBoOK) {
		// 	this.numii += TableUI.Instance().iii;
		// 	// this.numii++;
		// 	// console.log("numii进球", this.numii);
		// 	TableUI.Instance().ShowComBo(TableUI.Instance().hole, this.numii);//AI连杆特效
		// } else {
		// 	this.numii = 0;
		// }
		switch (this.nowShoot) {
			case 1://AI回合
				this.AI.changeType(type);
				TableUI.Instance().ld.visible = false;
				TableUI.Instance().slipgroup.visible = false;
				switch (type) {
					case 1:
						//摆球
						TableUI.Instance().saveSour('word10');//对方回合
						console.log('AI线后自由球');
						break;
					case 2:
						//自由球
						TableUI.Instance().saveSour('word4');//对方自由球
						console.log('AI自由球');
						break;
					case 3:
						//击球
						TableUI.Instance().saveSour('word7');//对方回合
						console.log('AI回合');
						break;
				}
				break;
			case -1://我的回合
				TableUI.Instance().MyRound();
				TableUI.Instance().changeType(type);
				TableUI.Instance().moveGan(1, 1);//////////////显示杆
				switch (type) {
					case 1:
						//摆球
						TableUI.Instance().saveSour('word9');//对方击球犯规 你获得线后自由球
						changeBG("resource/assets/bg/tableR.png");//发球区域
						console.log("玩家线后自由球");
						break;
					case 2:
						TableUI.Instance().saveSour('word5');//玩家自由球
						console.log('玩家自由球');
						//自由球
						break;
					case 3:
						//击球
						if (isMyGame) {
							TableUI.Instance().saveSour('word13');//连杆
							console.log('玩家连杆');
						}
						else {
							TableUI.Instance().saveSour('word6');//玩家回合
							console.log('玩家回合');
						}
						break;
				}
				egret.setTimeout(() =>
					TableUI.Instance().LighttoMyBalls()
					, this, 1000 / 60)
		}
	}
	/**游戏循环 */
	public gameLoop() {
		this.AI.update();
	}
	/**击球 */
	public Shoot(vigor, ganPoint) {
		TableUI.Instance().shootBall(vigor, ganPoint);
	}
	/**杆的移动 */
	public moveGan(msg) {
		TableUI.Instance().showGan(msg.stageX, msg.stageY);
	}
	/**摆球 */
	public puBall(msg) {
		if (!TableUI.Instance().isFirstLeg) {//非第一回合
			if (this.nowShoot != -1) {
				TableUI.Instance().saveSour('word4');//对方自由球
			}
			else {
				TableUI.Instance().saveSour('word5');//我的自由球
			}
		}
		TableUI.Instance().SMPutBall(msg);
	}
	/**随机顺序 */
	public randomOrder() {
		let random: number = Math.random();
		random = 0.1;
		if (random > 0.5) {
			//对方
			this.nowShoot = 1;
			this.AI.changeType(1);
			TableUI.Instance().saveSour('word7');//对方回合
			TableUI.Instance().ld.visible = false;
			TableUI.Instance().slipgroup.visible = false;
		} else {
			//我方
			this.nowShoot = -1;
			TableUI.Instance().changeType(1);
			TableUI.Instance().moveGan(1, 1);//////////////////显示杆
			TableUI.Instance().saveSour('word15');//请摆放主球并开球
			changeBG("resource/assets/bg/tableR.png");
			TableUI.Instance().ld.visible = true;
			TableUI.Instance().slipgroup.visible = true;
			TableUI.Instance().MyRange.touchEnabled = true;
		}
		TableUI.Instance().isFirstLeg = true;
	}
	/**确定花色 */
	public confirmColor(color) {
		let otherColor = color > 0 ? 0 : 1;
		if (this.nowShoot == -1) {
			TableUI.Instance().myColor = color;
			TableUI.Instance().SMColor(color);//我
			if (color == 0) {
				TableUI.Instance().saveSour('word11');//我是全色
			}
			else {
				TableUI.Instance().saveSour('word12');//我是花色
			}
			this.AI.setColor(otherColor);
		} else {
			TableUI.Instance().myColor = otherColor;
			TableUI.Instance().SMColor(otherColor);

			if (otherColor == 0) {
				TableUI.Instance().saveSour('word11');//我是全色
			}
			else {
				TableUI.Instance().saveSour('word12');//我是花色
			}
			this.AI.setColor(color);
		}
	}
	/**获取当前击球者的花色 */
	public getNowLegShootColor() {
		if (this.nowShoot == -1) {
			return TableUI.Instance().myColor;
		} else {
			return this.AI.getColor();
		}
	}
	/**判定胜负 */
	public determineOutcome(isWin: boolean) {
		if (isWin) {
			if (this.nowShoot == -1) {
				TableUI.Instance().judgeSuccessFailure(true);
			} else {
				TableUI.Instance().judgeSuccessFailure(false);
			}
		} else {
			if (this.nowShoot == -1) {
				TableUI.Instance().judgeSuccessFailure(false);
			} else {
				TableUI.Instance().judgeSuccessFailure(true);
			}
		}
		//重置ai数据
		this.AI.restAI();
		this.nowShoot = -1;
	}
}